/*
题目：买卖股票的最佳时机

给定一个数组 prices ，它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票，并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润，返回 0 。

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/
*/

#include <iostream>
#include <string>
#include <vector>
#include <list>
#include "TreeNode.hpp"
#include "ListNode.hpp"
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <functional>

using namespace std;

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        // 就是计算 当前最小值和后续最大值的差值
        int mval = INT_MAX;
        int res = 0;

        for (int i = 0; i < prices.size(); i++) {
            mval = min(mval, prices[i]);
            if (prices[i] - mval > res) {
                res = max(res, prices[i] - mval);
            }
        }

        return res;
    }
};